package com.example.listener;

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.io.IOException;

@Component
public class MyConsumer {

    @RabbitListener(queues = "CMDS_FX_QUEUE_1",containerFactory = "myFactory")
    public void receive(String msg, Channel channel, Message message) throws IOException {
        //会话唯一ID
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        try {
//            System.out.println(1/0);//  模拟业务代码 出现异常
            System.out.println("deliveryTag = "+deliveryTag+"-------------------message:" +msg);
//            Thread.sleep(400);
            channel.basicAck(deliveryTag,false);//  手动确认ack  通知broker 删除当前消息
            //  multiple：是否批量处理.true: 一次性将ack所有小于和等于deliveryTag的消息删除
            //   false   从 deliveryTag 消息索引开始  一条一条确认 删除
        }catch (Exception e){
            //  消息 重新放回队列机制配置
            e.printStackTrace();
            channel.basicNack(deliveryTag,false,true);//  第三个参数 ： true  表示 出现代码业务一次 消息 重新放回队列中 再次获取
        }
    }



}